﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ProyectoAlmacen.Negocio;
using ProyectoAlmacen.Models;
using ProyectoAlmacen.Persistencia.NH;

namespace ProyectoAlmacen.Controllers
{
    public class OCController : Controller
    {
        public static OCServiceImpl ordencompraService { get; set; }
        public static MaterialServiceImpl materialService  = new MaterialServiceImpl();
        public static ProveedorServiceImpl proveedorService = new ProveedorServiceImpl();


        public ActionResult Index()
        {
            MaterialDAO materiales = new MaterialDAO();
            ordencompraService = new OCServiceImpl();
            ICollection<OC> model = ordencompraService.ListarOC();
            return View(model);
        }

        //
        // GET: /OC/Details/5

        public ActionResult Details(int id)
        {
            OC model = ordencompraService.ObtenerOC(id);
            return View(model);
        }

        //
        // GET: /OC/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /OC/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                int idOC = int.Parse(collection["idOC"]);
                int idMaterial = int.Parse(collection["idMaterial"]);
                int idProveedor = int.Parse(collection["idProveedor"]);
                double cantidad  = double.Parse(collection["cantidad"]);
                int idUsuario = int.Parse(collection["idUsuario"]);
                ordencompraService.CrearOC(idOC,idMaterial, idProveedor,cantidad,idUsuario);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /OC/Edit/5
 
        public ActionResult Edit(int id)
        {
            OC model = ordencompraService.ObtenerOC(id);
            TempData["Materiales"] = ListadoComboMateriales(id);
            TempData["Proveedores"] = ListadoComboProveedores(id);
            return View(model);
        }

        //
        // POST: /OC/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                
                int idOC = int.Parse(collection["idOC"]);
                int idMaterial = int.Parse(collection["idMaterial"]);
                int idProveedor = int.Parse(collection["idProveedor"]);
                double cantidad = double.Parse(collection["cantidad"]);
                int idUsuario = int.Parse(collection["idUsuario"]);
                ordencompraService.EditarOC(idOC, idMaterial, idProveedor, cantidad, idUsuario);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /OC/Delete/5
 
        public ActionResult Delete(int id)
        {
            OC model = ordencompraService.ObtenerOC(id);
            return View(model);
        }

        //
        // POST: /OC/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                OC ordencompra = new OC();
                ordencompra = ordencompraService.ObtenerOC(id);
                ordencompraService.EliminarOC(ordencompra);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        private ICollection<SelectListItem> ListadoComboMateriales(int value)
        {
            ICollection<SelectListItem> materialesCombo = new List<SelectListItem>();
            materialesCombo.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            ICollection<Material> coleccionMaterial = materialService.ListarMaterial();
            foreach (Material mat in coleccionMaterial)
                if (mat.idMaterial == value)
                {

                    materialesCombo.Add(new SelectListItem()
                    {

                        Value = mat.idMaterial.ToString(),
                        Text = mat.Descripcion,
                        Selected = true
                    });

                }
                else
                {

                    materialesCombo.Add(new SelectListItem()
                    {

                        Value = mat.idMaterial.ToString(),
                        Text = mat.Descripcion,
                        Selected = false
                    });


                }

            return materialesCombo;
        }
        private ICollection<SelectListItem> ListadoComboProveedores(int value)
        {
            ICollection<SelectListItem> proveedoresCombo = new List<SelectListItem>();
            proveedoresCombo.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            ICollection<Proveedor> coleccionProveedor = proveedorService.ListarProveedor();
            foreach (Proveedor prov in coleccionProveedor)
                if (prov.idProveedor == value)
                {

                    proveedoresCombo.Add(new SelectListItem()
                    {

                        Value = prov.idProveedor.ToString(),
                        Text = prov.NombreRazon,
                        Selected = true
                    });

                }
                else
                {

                    proveedoresCombo.Add(new SelectListItem()
                    {

                        Value = prov.idProveedor.ToString(),
                        Text = prov.NombreRazon,
                        Selected = false
                    });


                }

            return proveedoresCombo;
        }
    }
}
